#include <bits/stdc++.h>
using namespace std;
const int N = 50010;
int n, k;
int p[N]; // 记录根节点
int d[N];//默认的距离为0



//b->c两个之间的距离为1时代表b吃c
//可以通过我们的数轴观察
//b->c之间的距离为2时c被b吃
//0时bc是同类
void build()
{
    for (int i = 1; i <= n; i++)
        p[i] = i;
}
int find(int num)
{
    if (num != p[num])
    {
        int u = find(p[num]);
        d[num] += d[p[num]];
        p[num] = u;
    }
    return p[num];
}
void union1(int l,int r,int v)
{
    
   int ul=find(l);
   int ur=find(r);
   if(ul!=ur)
   {
        p[ul]=ur;
        d[ul]=d[r]-d[l]+v;
   }
}
int getdis(int l,int r)
{
    if(find(l)==find(r))
    {
        return d[l]-d[r];
    }
    return 0
}
int getdist(int l,int r)
{
    int ul=find(l);
    int ur=find(r);
    if(ul==ur)
    {
        return d[l]-d[r];
    }
    return -1;
}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int ans = 0;
    cin >> n >> k;
    build();
    while (k--)
    {
        int a, b, c;
        cin >> a >> b >> c;
        if (b > n || c > n)
            ans++;
        else
        {
            if (a == 1)
            {
                // 代表我们看b，c是否是同类
                int ub = find(b);
                int uc = find(c);
                // 说明bc不是同类那么这句话就是假话
                if (ub == uc)
                {
                    //b到c的距离为不为0说明不是同类就是假话了
                    if ((d[b] - d[c]) % 3 != 0) ans++;
                }
                else
                {
                    // 每个集合维护任意两个有关系的节点
                    p[ub] = uc;
                    // 下面我们要计算出两个集合合并之后假设a集合和b集合
                    // a集合为b集合的孩子我们要自己给出a集合的跟节点到b节点的根节点的距离
                    // 这样a集合的节点通过find就可以逐个计算出答案
                    // 此时说明b与c是同类
                    d[ub] = d[c] - d[b];
                }
            }
            else
            {
                //b吃c
                int ub = find(b);
                int uc = find(c);
                if (ub == uc)
                {
                    // 如果在一个集合上面
                    //bc距离为1时b可以吃c
                    if ((d[b] - d[c]-1) % 3 != 0) ans++;
                }
                else
                {
                    p[ub] = uc;
                    d[ub] = d[c] - d[b] + 1;
                }
            }
        }
    }
    cout << ans << endl;
    return 0;
}
